package mb.admin.webbean;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import mb.admin.dao.UserDAO;
import mb.admin.data.UserData;
import mb.commons.CalendarManager;

/**
 * Manager widoku 'users'
 * @author Michał Budziło
 *
 */
public class UserManager {
	private UserDAO dao;
	private ArrayList<UserData> dataList;
	private UserData editedData;
	private UserData newData;
	private CalendarManager calendar;
	private ArrayList<SelectItem> rodzajList;
	
	/**
	 * Konstruktor
	 */
	public UserManager()
	{
		dao = new UserDAO();
		calendar = new CalendarManager();
		
		rodzajList = new ArrayList<SelectItem>();
		rodzajList.add(new SelectItem("admin"	, "admin"));
		rodzajList.add(new SelectItem("pracownik"	, "pracownik"));
		rodzajList.add(new SelectItem("kurier"	, "kurier"	));
		rodzajList.add(new SelectItem("klient"	, "klient"	));
		
		dataList = dao.getUserList();
		
		
	}
	
	/**
	 * Metoda przygotowuje dane przed dodaniem nowego użytkownika
	 */
	public void prepareAddData() {
		System.out.println("new");
		calendar.equals("");
		newData= new UserData();
		
	}

	/**
	 * Metoda dodaje do bazy danych nowego użytkownika
	 */
	public void addData() {
		dao.insertData(newData);
		refreshData();
	}

	/**
	 * Metoda przygotowuje dane przed edycją użytkownika
	 */
	public void prepareEditData() {

	}

	/**
	 * Metoda edytuje w bazie danych użytkownika
	 */
	public void editData() {
		dao.updateData(editedData);
	}

	/**
	 * Metoda usuwa z bazy danych użytkownika
	 */
	public void deleteData() {
		dao.deleteData(editedData);
		refreshData();
	}

	/**
	 * Metoda pobiera z bazy danych listę użytkowników
	 */
	public void refreshData() {
		dataList = dao.getUserList();
	}
	
	
	 /**
	  * Metoda walidacji adresu e-mail
	 * @param facesContext kontekst
	 * @param uIComponent komponent
	 * @param object obiekt
	 */
	public void emailValidate(FacesContext facesContext, 
	            UIComponent uIComponent, Object object)  {
	        FacesContext context = FacesContext.getCurrentInstance();
	        String enteredEmail = (String)object;
	        //Set the email pattern string

	        Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
	        
	        //Match the given string with the pattern
	        Matcher m = p.matcher(enteredEmail);
	        
	        //Check whether match is found
	        boolean matchFound = m.matches();
	        
	        if (!matchFound) {
	            FacesMessage message = new FacesMessage();
	            message.setDetail("niepoprawy adres Email");
	            message.setSummary("niepoprawy adres Email");
	            message.setSeverity(FacesMessage.SEVERITY_FATAL);
	            context.addMessage(uIComponent.getClientId(context), message);
	        }
	 }

	
	

	/**
	 * @return the dataList
	 */
	public ArrayList<UserData> getDataList() {
		return dataList;
	}

	/**
	 * @param dataList the dataList to set
	 */
	public void setDataList(ArrayList<UserData> dataList) {
		this.dataList = dataList;
	}

	/**
	 * @return the editedData
	 */
	public UserData getEditedData() {
		return editedData;
	}

	/**
	 * @param editedData the editedData to set
	 */
	public void setEditedData(UserData editedData) {
		this.editedData = editedData;
	}

	/**
	 * @return the newData
	 */
	public UserData getNewData() {
		return newData;
	}

	/**
	 * @param newData the newData to set
	 */
	public void setNewData(UserData newData) {
		this.newData = newData;
	}

	/**
	 * @return the calendar
	 */
	public CalendarManager getCalendar() {
		return calendar;
	}

	/**
	 * @param calendar the calendar to set
	 */
	public void setCalendar(CalendarManager calendar) {
		this.calendar = calendar;
	}

	/**
	 * @return the rodzajList
	 */
	public ArrayList<SelectItem> getRodzajList() {
		return rodzajList;
	}

	/**
	 * @param rodzajList the rodzajList to set
	 */
	public void setRodzajList(ArrayList<SelectItem> rodzajList) {
		this.rodzajList = rodzajList;
	}
	
	
	
}
